AOP(Aspect-Oriented Programming),是程式設計的模式,他讓我們將應用程式的關注點(concerns) 模組化並分離出來,增加程式的組織性、可維護性和可讀性。
先介紹來介紹AOP的概念 :
在Spring裡我們可以以 @Aspect
定義一個切面:
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class SampleAspect {
@Pointcut("execution(* com.example..*(..))")
private void anyMethod() {}
@Before("anyMethod()")
public void beforeAdvice() {
System.out.println("前置通知");
}
@AfterReturning(pointcut = "anyMethod()", returning = "result")
public void afterReturningAdvice() {
System.out.println("後置通知" + returning);
}
@After("anyMethod()")
public void afterAdvice() {
System.out.println("最終通知");
}
}
@Pointcut
定義切點,目標com.example底下的所有方法。@before
定義前置通知,在目標方法執行前執行。@AfterReturning
定義後置通知,在目標方法正常執行完畢後執行。@After
定義最終通知,無論目標方法是否正常執行完畢,都會執行。在這些註釋後,括號中方法就是連接點 。
最後將切面配置到Spring應用程序中,讓Spring容器知道它應該在哪些地方應用切面。
spring:
aop:
auto: true
application:
name: SpringBootApp
logging:
level:
com.example.SampleAspect: DEBUG # 設置切面的日誌級別為DEBUG
這樣Spring自動將切點創建AOP代理咯~
我們未來在設計程式時,就可以將日誌記錄、事務管理、安全性、性能測試等關注點從主要的應用程序代碼中分離出來!!讓程式更容易管理與組織!!
https://docs.spring.io/spring-framework/reference/core/aop/introduction-defn.html
https://en.wikipedia.org/wiki/Aspect-oriented_programming